#字典     {}


#列表可以存储任意的数据类型，但一般情况下，我们都存储单一数据类型
names = ['zhangsan','lisi','wangwu']
score = [100,98,99,97]

#这个列表里的每一个元素到底代表的是什么？
#列表只能存储值，但是无法对值进行描述
person = ['zhangsan',18,98,97,95,93,180,150]

'''
字典不仅可以保存值，还可以对值进行描述
使用大括号来表示一个字典，不仅有值value，还有值的key
字典里的数据都是以键值对key-value的形式保留的
key和value之间使用冒号：来连接
多个键值对之间用逗号,来分隔
'''
person = {'name':'zhangsan','age':18,'chinese':98,'math':95,'english':95,'gym':93,'hight':180,'weight':150}

#注意事项：
#字典里的key不可以重复，如果key重复了，后一个key对应的值会覆盖前一个
#字典里的value可以是任意数据类型，但key只能使用不可变数据类型，一般使用字符串
person = {
    'name':'zhangsan',
    'age':18,
    'hight':180,
    'weight':150,
    'age':20,#会替换上一个age值
    'isPass':True,#可以是布尔值
    'hobbies':['唱','跳','篮球','rap'],#也可以是一个列表
    4:'good',
    ('yes','hello'):100
    
    #['ok','no']:'hi'   key只能是不可变数据类型
}
print(person)

#字典的增删改查
person = {'name':'zhangsan','age':18}

#查找数据：      字典的数据在保存时是无序的，所以不能通过下标来获取

print(person['name'])#使用key获取对应的value
#如果查询的key不存在会直接报错

#需求：获取一个不存在的key时，不报错，如果这个key存在，使用默认值
#使用字典的get方法就能实现这个功能
#使用字典的get方法，如果key不存在，会默认返回None，而不报错
#get只会读取，不会添加数据
print(person.get('gender'))
#可以修改返回的值
print(person.get('gender','female'))#返回female
#如果key存在就不会返回指定的值
print(person.get('name','lisi'))#zhangsan

print(person)

#字典的修改和新增
person = {'name':'zhangsan','age':18,'addr':'瑞金'}
print(person['name'])

#使用key可以修改对应的value
person['name'] = 'lisi'#如果key存在，则会修改key对应的value

person['gender'] = 'famale'#如果key不存在，会往字典里添加一个key-value键值对
print(person)

#字典的删除  clear   pop     popitem
person.pop('name')#把name对应的键值对删除了


print(person)


result = person.popitem()#字典是无序的，所以不知道会删掉哪个

print(result)#显示被删除的键值对

print(person)

del person['addr']
print(person)

person.clear()#清空字典
print(person)

#update使用
#列表可以用extend的方法将两个列表合并成一个列表
person1 = {'name':'zhangsan','age':18}
person2 = {'addr':'瑞金',}
person1.update(person2)
print(person1)
#字典中间不能用加法合并，合并只能用update

#字典的遍历
person = {'name':'zhangsan','age':18,'height':'180'}
#列表和元组是单一的数据，字典是键值对形式

#遍历一：for in循环
for x in person:    
    print(x)        #for in 循环获取的是key
    
    print(x, '=',person[x])

#遍历二：获取所有的key，然后遍历key，根据key获取value      #相较于一，要一更好，一更简单，方法类似
#print(person.keys())    #dict_keys(['name', 'age', 'height'])
for k in person.keys():     #也可以用类似方法获取values   
    print(k, '=',person[k])

#遍历三：列表里的元素是元组，把元组当做整体进行遍历
#print(person.items())#dict_items([('name', 'zhangsan'), ('age', 18), ('height', '180')])
for item in person.items():
    print(item)
    print(item[0],'=',item[1])

#遍历四：拆包
for k,v in person.items():
    print(k,'=',v)


#练习：查询列表里是元素出现了几次
chars =  ['a','c','x','d','p','a','p','a','c']

char_count = {}

for char in chars:
    if char not in char_count:
        char_count[char] = chars.count(char)
print(char_count)


#字典推导式
dict = {"a":100,"b":200,"c":300}
dict = {v:k for k,v in dict.items()}#v:k键值对
print(dict)
